#include <stdio.h>
#include <stdlib.h>

#include "ELinkList.h"
/*
 * 内存分配
 *
 * 为线性链表申请一个结点，并存入指定的数据e。
 *
 *【备注】
 * static修饰的含义是该函数仅限当前文件内使用
 */
Status MakeNode(Link* p, ElemType e)
{
    if (p == NULL)
    {
        return ERROR;
    }

    (*p) = malloc(sizeof(LNode));
    if (*p == NULL)
    {
        return ERROR;
    }
    
    (*p)->elem = e;
    (*p)->next = NULL;

    return OK;
}


/*
 * 内存回收
 *
 * 释放线性链表中指定的结点。
 *
 *【备注】
 * static修饰的含义是该函数仅限当前文件内使用
 */
void FreeNode(Link* p)
{
    Link temp;
    if (p == NULL)
    {
        return ;
    }

    temp = (*p);
    while (temp != NULL)
    {
        temp = (*p)->next;
        free((*p));
        (*p) = temp;
    }
    
}


/*
 * 初始化
 *
 * 初始化成功则返回OK，否则返回ERROR。
 */
Status InitList(ELinkList* L)
{
    Link temp;
    if (L == NULL)
    {
        return ERROR;
    }

    temp = malloc(sizeof(LNode));
    if (temp == NULL)
    {
        return ERROR;
    }
    
    L->head = L->tail = L;
    L->len = 0;

    return OK;
}